package patient

//
//import (
//	"api-gateway/basic/config"
//	proto "api-gateway/basic/proto"
//	"api-gateway/handler/request"
//	"context"
//	"github.com/gin-gonic/gin"
//	"net/http"
//	"strconv"
//	"time"
//)
//
//// ==================== 开药申请 ====================
//
//// CreatePrescription 创建开药申请
//func CreatePrescription(c *gin.Context) {
//	var req request.CreatePrescriptionReq
//	if err := c.ShouldBindJSON(&req); err != nil {
//		c.JSON(http.StatusBadRequest, gin.H{
//			"code": 400,
//			"msg":  "请求参数错误: " + err.Error(),
//		})
//		return
//	}
//
//	userID := c.GetInt64("userId")
//	if userID == 0 {
//		c.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "用户未登录"})
//		return
//	}
//
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//	defer cancel()
//
//	// RPC调用
//	resp, err := config.PatientClient.CreatePrescriptionRequest(ctx, &proto.CreatePrescriptionRequestReq{
//		UserId:               userID,
//		PatientId:            req.PatientId,
//		SymptomDescription:   req.SymptomDescription,
//		PrescriptionImageUrl: req.PrescriptionImageUrl,
//	})
//
//	if err != nil {
//		c.JSON(http.StatusInternalServerError, gin.H{
//			"code": 500,
//			"msg":  "创建开药申请失败: " + err.Error(),
//		})
//		return
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "创建开药申请成功",
//		"data": gin.H{
//			"prescription_id": resp.PrescriptionRequestId,
//		},
//	})
//}
//
//// SelectPrescriptionPatient 选择患者
//func SelectPrescriptionPatient(c *gin.Context) {
//	var req request.SelectPrescriptionDoctorReq
//	if err := c.ShouldBindJSON(&req); err != nil {
//		c.JSON(http.StatusBadRequest, gin.H{
//			"code": 400,
//			"msg":  "请求参数错误: " + err.Error(),
//		})
//		return
//	}
//
//	userID := c.GetInt64("userId")
//	if userID == 0 {
//		c.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "用户未登录"})
//		return
//	}
//
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//	defer cancel()
//
//	// RPC调用
//	_, err := config.PatientClient.SelectPrescriptionDoctor(ctx, &proto.SelectPrescriptionDoctorReq{
//		PrescriptionRequestId: req.PrescriptionRequestId,
//		UserId:                userID,
//		DoctorId:              req.DoctorId,
//	})
//
//	if err != nil {
//		c.JSON(http.StatusInternalServerError, gin.H{
//			"code": 500,
//			"msg":  "选择患者失败: " + err.Error(),
//		})
//		return
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "选择患者成功",
//	})
//}
//
//// SubmitPrescriptionDescription 填写病情描述
//func SubmitPrescriptionDescription(c *gin.Context) {
//	var req request.SubmitDescriptionReq
//	if err := c.ShouldBindJSON(&req); err != nil {
//		c.JSON(http.StatusBadRequest, gin.H{
//			"code": 400,
//			"msg":  "请求参数错误: " + err.Error(),
//		})
//		return
//	}
//
//	userID := c.GetInt64("userId")
//	if userID == 0 {
//		c.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "用户未登录"})
//		return
//	}
//
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//	defer cancel()
//
//	// RPC调用
//	_, err := config.PatientClient.SubmitPrescriptionDescription(ctx, &proto.SubmitPrescriptionDescriptionRequest{
//		PrescriptionRequestId: req.PrescriptionRequestId,
//		UserId:                userID,
//		Description:           req.Description,
//		ImageUrls:             req.ImageUrls,
//	})
//
//	if err != nil {
//		c.JSON(http.StatusInternalServerError, gin.H{
//			"code": 500,
//			"msg":  "提交病情描述失败: " + err.Error(),
//		})
//		return
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "提交病情描述成功",
//	})
//}
//
//// UploadPrescription 上传处方
//func UploadPrescription(c *gin.Context) {
//	var req request.UploadPrescriptionReq
//	if err := c.ShouldBindJSON(&req); err != nil {
//		c.JSON(http.StatusBadRequest, gin.H{
//			"code": 400,
//			"msg":  "请求参数错误: " + err.Error(),
//		})
//		return
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "上传处方成功",
//	})
//}
//
//// ==================== 药品管理 ====================
//
//// GetMedicineList 药品列表
//func GetMedicineList(c *gin.Context) {
//	_, _ = strconv.ParseUint(c.Query("category_id"), 10, 64)
//	keyword := c.Query("keyword")
//	page, _ := strconv.ParseInt(c.Query("page"), 10, 32)
//	pageSize, _ := strconv.ParseInt(c.Query("page_size"), 10, 32)
//
//	if page == 0 {
//		page = 1
//	}
//	if pageSize == 0 {
//		pageSize = 20
//	}
//
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//	defer cancel()
//
//	// RPC调用
//	resp, err := config.MedicineClient.GetMedicineList(ctx, &proto.GetMedicineListRequest{
//		Page:     int32(page),
//		PageSize: int32(pageSize),
//		Keyword:  keyword,
//		Category: "",
//	})
//
//	if err != nil {
//		c.JSON(http.StatusInternalServerError, gin.H{
//			"code": 500,
//			"msg":  "获取药品列表失败: " + err.Error(),
//		})
//		return
//	}
//
//	// 转换响应数据
//	var medicines []gin.H
//	for _, medicine := range resp.Medicines {
//		medicines = append(medicines, gin.H{
//			"name":     medicine.Name,
//			"category": medicine.Category,
//			"price":    medicine.Price,
//		})
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "获取药品列表成功",
//		"data": gin.H{
//			"medicines": medicines,
//			"total":     resp.Total,
//			"page":      page,
//			"page_size": pageSize,
//		},
//	})
//}
//
//// GetMedicineCategory 药品分类
//func GetMedicineCategory(c *gin.Context) {
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//	defer cancel()
//
//	// RPC调用
//	resp, err := config.MedicineClient.GetMedicineCategory(ctx, &proto.GetMedicineCategoryRequest{})
//
//	if err != nil {
//		c.JSON(http.StatusInternalServerError, gin.H{
//			"code": 500,
//			"msg":  "获取药品分类失败: " + err.Error(),
//		})
//		return
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "获取药品分类成功",
//	})
//}
//
//// GetMedicineDetail 药品详情
//func GetMedicineDetail(c *gin.Context) {
//	medicineID, err := strconv.ParseUint(c.Param("id"), 10, 64)
//	if err != nil {
//		c.JSON(http.StatusBadRequest, gin.H{
//			"code": 400,
//			"msg":  "药品ID格式错误",
//		})
//		return
//	}
//
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//	defer cancel()
//
//	// RPC调用
//	resp, err := config.MedicineClient.GetMedicineDetail(ctx, &proto.GetMedicineDetailRequest{
//		MedicineId: int64(medicineID),
//	})
//
//	if err != nil {
//		c.JSON(http.StatusInternalServerError, gin.H{
//			"code": 500,
//			"msg":  "获取药品详情失败: " + err.Error(),
//		})
//		return
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "获取药品详情成功",
//		"data": gin.H{
//			"medicine": gin.H{
//				"name":     resp.Medicine.Name,
//				"category": resp.Medicine.Category,
//				"price":    resp.Medicine.Price,
//			},
//		},
//	})
//}
//
//// AddMedicine 添加药品
//func AddMedicine(c *gin.Context) {
//	var req request.AddMedicineReq
//	if err := c.ShouldBindJSON(&req); err != nil {
//		c.JSON(http.StatusBadRequest, gin.H{
//			"code": 400,
//			"msg":  "请求参数错误: " + err.Error(),
//		})
//		return
//	}
//
//	userID := c.GetInt64("userId")
//	if userID == 0 {
//		c.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "用户未登录"})
//		return
//	}
//
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//	defer cancel()
//
//	// RPC调用
//	_, err := config.PatientClient.AddMedicineToPrescription(ctx, &proto.AddMedicineToPrescriptionRequest{
//		PrescriptionRequestId: req.PrescriptionRequestId,
//		UserId:                userID,
//		MedicineId:            req.MedicineId,
//		Quantity:              req.Quantity,
//	})
//
//	if err != nil {
//		c.JSON(http.StatusInternalServerError, gin.H{
//			"code": 500,
//			"msg":  "添加药品失败: " + err.Error(),
//		})
//		return
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "添加药品成功",
//	})
//}
//
//// RemoveMedicine 删除药品
//func RemoveMedicine(c *gin.Context) {
//	var req request.RemoveMedicineReq
//	if err := c.ShouldBindJSON(&req); err != nil {
//		c.JSON(http.StatusBadRequest, gin.H{
//			"code": 400,
//			"msg":  "请求参数错误: " + err.Error(),
//		})
//		return
//	}
//
//	userID := c.GetInt64("userId")
//	if userID == 0 {
//		c.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "用户未登录"})
//		return
//	}
//
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//	defer cancel()
//
//	// RPC调用
//	_, err := config.PatientClient.RemoveMedicineFromPrescription(ctx, &proto.RemoveMedicineFromPrescriptionRequest{
//		PrescriptionRequestId: req.PrescriptionRequestId,
//		UserId:                userID,
//		MedicineId:            req.MedicineId,
//	})
//
//	if err != nil {
//		c.JSON(http.StatusInternalServerError, gin.H{
//			"code": 500,
//			"msg":  "删除药品失败: " + err.Error(),
//		})
//		return
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "删除药品成功",
//	})
//}
//
//// GetSelectedMedicines 已选药品清单
//func GetSelectedMedicines(c *gin.Context) {
//	prescriptionID := c.Query("prescription_id")
//	if prescriptionID == "" {
//		c.JSON(http.StatusBadRequest, gin.H{
//			"code": 400,
//			"msg":  "缺少处方ID",
//		})
//		return
//	}
//
//	userID := c.GetInt64("userId")
//	if userID == 0 {
//		c.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "用户未登录"})
//		return
//	}
//
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//	defer cancel()
//
//	// RPC调用
//	resp, err := config.PatientClient.GetSelectedMedicines(ctx, &proto.GetSelectedMedicinesRequest{
//		PrescriptionRequestId: prescriptionID,
//		UserId:                userID,
//	})
//	if err != nil {
//		c.JSON(http.StatusInternalServerError, gin.H{
//			"code": 500,
//			"msg":  "获取已选药品清单失败: " + err.Error(),
//		})
//		return
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "获取已选药品清单成功",
//		"data": resp.Medicines,
//	})
//}
//
//// ==================== 选择医生 ====================
//
//// GetPrescriptionDoctorList 可开药医生列表
//func GetPrescriptionDoctorList(c *gin.Context) {
//	prescriptionID := c.Query("prescription_id")
//	if prescriptionID == "" {
//		c.JSON(http.StatusBadRequest, gin.H{
//			"code": 400,
//			"msg":  "缺少处方ID",
//		})
//		return
//	}
//
//	userID := c.GetInt64("userId")
//	if userID == 0 {
//		c.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "用户未登录"})
//		return
//	}
//
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//	defer cancel()
//
//	// RPC调用
//	resp, err := config.PatientClient.GetPrescriptionDoctorList(ctx, &proto.GetPrescriptionDoctorListRequest{
//		PrescriptionRequestId: prescriptionID,
//		UserId:                userID,
//	})
//	if err != nil {
//		c.JSON(http.StatusInternalServerError, gin.H{
//			"code": 500,
//			"msg":  "获取可开药医生列表失败: " + err.Error(),
//		})
//		return
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "获取可开药医生列表成功",
//		"data": resp.Doctors,
//	})
//}
//
//// SelectPrescriptionDoctor 选择开药医生
//func SelectPrescriptionDoctor(c *gin.Context) {
//	var req request.SelectPrescriptionDoctorReq
//	if err := c.ShouldBindJSON(&req); err != nil {
//		c.JSON(http.StatusBadRequest, gin.H{
//			"code": 400,
//			"msg":  "请求参数错误: " + err.Error(),
//		})
//		return
//	}
//
//	userID := c.GetInt64("userId")
//	if userID == 0 {
//		c.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "用户未登录"})
//		return
//	}
//
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//	defer cancel()
//
//	// RPC调用
//	_, err := config.PatientClient.SelectPrescriptionDoctor(ctx, &proto.SelectPrescriptionDoctorReq{
//		PrescriptionRequestId: req.PrescriptionRequestId,
//		UserId:                userID,
//		DoctorId:              req.DoctorId,
//	})
//	if err != nil {
//		c.JSON(http.StatusInternalServerError, gin.H{
//			"code": 500,
//			"msg":  "选择开药医生失败: " + err.Error(),
//		})
//		return
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "选择开药医生成功",
//	})
//}
//
//// ==================== 开药支付 ====================
//
//// PayPrescriptionWithAlipay 支付宝支付
//func PayPrescriptionWithAlipay(c *gin.Context) {
//	prescriptionID := c.Query("prescription_id")
//	if prescriptionID == "" {
//		c.JSON(http.StatusBadRequest, gin.H{
//			"code": 400,
//			"msg":  "缺少处方ID",
//		})
//		return
//	}
//
//	userID := c.GetInt64("userId")
//	if userID == 0 {
//		c.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "用户未登录"})
//		return
//	}
//
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//	defer cancel()
//
//	// RPC调用
//	resp, err := config.PatientClient.GeneratePrescriptionPaymentLink(ctx, &proto.GeneratePrescriptionPaymentLinkRequest{
//		PrescriptionRequestId: prescriptionID,
//		UserId:                userID,
//		PaymentType:           "alipay",
//	})
//	if err != nil {
//		c.JSON(http.StatusInternalServerError, gin.H{
//			"code": 500,
//			"msg":  "生成支付链接失败: " + err.Error(),
//		})
//		return
//	}
//
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "生成支付链接成功",
//		"data": gin.H{
//			"pay_url": resp.PayUrl,
//		},
//	})
//}
